package com.hspedu.innerclass;

/**
 * 演示局部内部类
 */
public class LocallInnerClass {
    public static void main(String[] args) {
        Outer02 outer02 = new Outer02();
        outer02.m1();
    }
}


class Outer02 {//外部类
    private int n1 = 100;
    private void m2() {//私有方法
        System.out.println("m2()");
    }
    public void m1() {//方法
        //2.局部内部类是定义在外部类的局部位置上，通常在方法中
        //3.不能添加访问修饰符，但是可以使用 final 修饰
        //4.作用域仅仅在定义它的方法或代码块中
        final class Inner02 {//局部内部类
            //1.可以直接访问外部类的所有成员，包含私有的
            private int n1 = 800;
            public void f1() {
                //5.局部内部类可以直接访问外部类的成员
                //7.如果外部类和局部内部类的成员重名时，默认遵循就近原则，访问外部类的成员使用
                //  外部类名.this.成员  访问
                System.out.println("Outer n1=" + Outer02.this.n1);//100
                System.out.println("Inner n1=" + n1);//800
                m2();
            }
        }

        //6.外部类在方法中，可以创建Inner02对象，然后调用方法
        Inner02 inner02 = new Inner02();
        inner02.f1();
    }

    {//代码块
        class Inner03 {}//局部内部类
    }

}